【精选】Windows10+VisualStudio2022+CUDA11.7环境配置

您所在的位置:网站首页 visual studio 环境配置 【精选】Windows10+VisualStudio2022+CUDA11.7环境配置

【精选】Windows10+VisualStudio2022+CUDA11.7环境配置

2023-11-07 09:08| 来源: 网络整理| 查看: 265

转载自https://blog.csdn.net/krian_a/article/details/116031532 由于CUDA自11.6版本不会将Samples集成在toolkit安装包中,原文中介绍的方法需要做一些小的改动,本文针对的是CUDA11.6之后版本的环境配置 CUDA11.6之前的版本需要按照原文中的步骤实现环境配置

Windows10+VisualStudio2022+CUDA11.7环境配置 一、调整配置管理器平台类型二、配置生成属性三、配置基本库目录四、配置CUDA静态链接库路径五、选用CUDA静态链接库六、 配置源码文件风格七、测试程序代码运行结果

一、调整配置管理器平台类型

右键项目→ 属性→ 平台“x64”

在这里插入图片描述 在这里插入图片描述

二、配置生成属性

右键项目 → 生成依赖项→ 生成自定义→ 勾选“CUDA XXX” 在这里插入图片描述 在这里插入图片描述

三、配置基本库目录

注意:后续步骤中出现的目录地址需取决于你当前的CUDA版本及安装路径

右键项目→属性→ 配置属性→ VC++目录→ 包含目录,添加以下目录: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include ……→ 库目录,添加以下目录: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

四、配置CUDA静态链接库路径

右键项目→ 属性→ 配置属性→ 链接器→ 常规→ 附加库目录,添加以下目录:

\$(CUDA_PATH_V11_7)\lib$(Platform) (查看环境变量改变CUDA_PATH_V11_7,v11_7指的安装的cuda版本)

在这里插入图片描述 在这里插入图片描述

五、选用CUDA静态链接库

右键项目→ 属性→ 配置属性→ 链接器→ 输入→ 附加依赖项,添加以下库:

cublas.lib cuda.lib cudadevrt.lib cudart.lib cudart_static.lib cufft.lib cufftw.lib curand.lib cusolver.lib cusparse.lib nppc.lib nppial.lib nppicc.lib nppidei.lib nppif.lib nppig.lib nppim.lib nppist.lib nppisu.lib nppitc.lib npps.lib nvblas.lib nvml.lib nvrtc.lib OpenCL.lib

在这里插入图片描述 在这里插入图片描述

六、 配置源码文件风格

右键源文件→ 添加→ 新建项→ 选择 “CUDA C/C++ File” 右键 “xxx.cu" 源文件→ 属性→ 配置属性→ 常规→ 项类型→ 设置为“CUDA C/C++” 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

七、测试程序 代码 #include "cuda_runtime.h" #include "device_launch_parameters.h" #include cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size); __global__ void addKernel(int *c, const int *a, const int *b) { int i = threadIdx.x; c[i] = a[i] + b[i]; } int main() { const int arraySize = 5; const int a[arraySize] = { 1, 2, 3, 4, 5 }; const int b[arraySize] = { 10, 20, 30, 40, 50 }; int c[arraySize] = { 0 }; // Add vectors in parallel. cudaError_t cudaStatus = addWithCuda(c, a, b, arraySize); if (cudaStatus != cudaSuccess) { fprintf(stderr, "addWithCuda failed!"); return 1; } printf("{1,2,3,4,5} + {10,20,30,40,50} = {%d,%d,%d,%d,%d}\n", c[0], c[1], c[2], c[3], c[4]); // cudaDeviceReset must be called before exiting in order for profiling and // tracing tools such as Nsight and Visual Profiler to show complete traces. cudaStatus = cudaDeviceReset(); if (cudaStatus != cudaSuccess) { fprintf(stderr, "cudaDeviceReset failed!"); return 1; } return 0; } // Helper function for using CUDA to add vectors in parallel. cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size) { int *dev_a = 0; int *dev_b = 0; int *dev_c = 0; cudaError_t cudaStatus; // Choose which GPU to run on, change this on a multi-GPU system. cudaStatus = cudaSetDevice(0); if (cudaStatus != cudaSuccess) { fprintf(stderr, "cudaSetDevice failed! Do you have a CUDA-capable GPU installed?"); goto Error; } // Allocate GPU buffers for three vectors (two input, one output) . cudaStatus = cudaMalloc((void**)&dev_c, size * sizeof(int)); if (cudaStatus != cudaSuccess) { fprintf(stderr, "cudaMalloc failed!"); goto Error; } cudaStatus = cudaMalloc((void**)&dev_a, size * sizeof(int)); if (cudaStatus != cudaSuccess) { fprintf(stderr, "cudaMalloc failed!"); goto Error; } cudaStatus = cudaMalloc((void**)&dev_b, size * sizeof(int)); if (cudaStatus != cudaSuccess) { fprintf(stderr, "cudaMalloc failed!"); goto Error; } // Copy input vectors from host memory to GPU buffers. cudaStatus = cudaMemcpy(dev_a, a, size * sizeof(int), cudaMemcpyHostToDevice); if (cudaStatus != cudaSuccess) { fprintf(stderr, "cudaMemcpy failed!"); goto Error; } cudaStatus = cudaMemcpy(dev_b, b, size * sizeof(int), cudaMemcpyHostToDevice); if (cudaStatus != cudaSuccess) { fprintf(stderr, "cudaMemcpy failed!"); goto Error; } // Launch a kernel on the GPU with one thread for each element. addKernel(dev_c, dev_a, dev_b); // Check for any errors launching the kernel cudaStatus = cudaGetLastError(); if (cudaStatus != cudaSuccess) { fprintf(stderr, "addKernel launch failed: %s\n", cudaGetErrorString(cudaStatus)); goto Error; } // cudaDeviceSynchronize waits for the kernel to finish, and returns // any errors encountered during the launch. cudaStatus = cudaDeviceSynchronize(); if (cudaStatus != cudaSuccess) { fprintf(stderr, "cudaDeviceSynchronize returned error code %d after launching addKernel!\n", cudaStatus); goto Error; } // Copy output vector from GPU buffer to host memory. cudaStatus = cudaMemcpy(c, dev_c, size * sizeof(int), cudaMemcpyDeviceToHost); if (cudaStatus != cudaSuccess) { fprintf(stderr, "cudaMemcpy failed!"); goto Error; } Error: cudaFree(dev_c); cudaFree(dev_a); cudaFree(dev_b); return cudaStatus; } 运行结果

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3